#ifndef CHARACTER_H_
#define CHARACTER_H_

#include "enums.h"
#include "events.h"

//Forward declarations
class StackI;
class ActionList;

//Additional structs
struct BehaviourPriority
{
	BehaviourTypes behaviourType;
	int priority;
	BehaviourPriority(BehaviourTypes _type, int _priority)
	{
		behaviourType = _type;
		priority = _priority;
	}

	BehaviourPriority(){}
};

class Character
{

protected:
	BehaviourPriority* behavioursAvailable = 0;
	int numberOfBehaviours = 0;

	Behaviour* getCurrentBehaviour(StackI* _behaviourStack);
	Behaviour* getHighestPriorityBehaviour(Event* _event);
	int getBehaviourInternalPriorityValue(BehaviourTypes type);

	void sortBehaviourListOnPriority(BehaviourList* _behaviours);

public:


	bool processEvents(EventList* _events, StackI* _immediate, StackI* _shortTerm, StackI* _longTerm);

	ActionList* update(StackI* _immediate, StackI* _shortTerm, StackI* _longTerm, float _deltaSeconds);


	~Character();


};


#endif